package T0;

import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.CompletableFuture;

/**
 * @Author cheng.song
 * @create 2022/2/24 15:06
 */
public class T3无重复字符的最长子串 {

    ThreadLocal tl = new ThreadLocal();



    public static void main(String[] args) throws InterruptedException {
        String s = "abba";
        System.out.println(lengthOfLongestSubstring(s));
    }

    public static int lengthOfLongestSubstring(String s) {
        HashMap<Object,Integer> indexMap = new HashMap();
        int length = 0;
        int startIndex = 0;
        for (int i = 0; i < s.length(); i++) {
            if(indexMap.get(s.charAt(i))!=null){
                startIndex=Math.max(startIndex,indexMap.get(s.charAt(i))+1);
            }
            length = Math.max(length,i-startIndex+1);
            indexMap.put(s.charAt(i),i);
        }
        return length;
        // 记录字符上一次出现的位置
//        int[] last = new int[128];
//        for(int i = 0; i < 128; i++) {
//            last[i] = -1;
//        }
//        int n = s.length();
//
//        int res = 0;
//        int start = 0; // 窗口开始位置
//        for(int i = 0; i < n; i++) {
//            int index = s.charAt(i);
//            start = Math.max(start, last[index] + 1);
//            res   = Math.max(res, i - start + 1);
//            last[index] = i;
//        }
//
//        return res;
    }
}
